package com.itcam.web.model.vo;

import cn.hutool.json.JSONUtil;
import com.itcam.maker.meta.Meta;
import com.itcam.web.model.entity.Generator;
import lombok.Data;
import org.springframework.beans.BeanUtils;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

@Data
public class GeneratorVO implements Serializable {

    /**
     * id
     */
    private Long id;

    /**
     * 名称
     */
    private String name;

    /**
     * 描述
     */
    private String description;

    /**
     * 基础包
     */
    private String basePackage;

    /**
     * 版本
     */
    private String version;

    /**
     * 作者
     */
    private String author;

    /**
     * 图片
     */
    private String picture;

    /**
     * 标签列表
     */
    private List<String> tags;

    /**
     * 文件配置（json字符串）
     */
    private Meta.FileConfig fileConfig;

    /**
     * 模型配置（json字符串）
     */
    private Meta.ModelConfig modelConfig;

    /**
     * 代码生成器产物路径
     */
    private String distPath;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 创建用户 id
     */
    private Long userId;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 用户
     */
    private UserVO user;

    private static final long serialVersionUID = 1L;

    /**
     * 包装类转对象
     *
     * @param generatorVO 生成器VO对象
     * @return 转换后的生成器对象
     */
    public static Generator voToObj(GeneratorVO generatorVO) {
        // 如果传入的generatorVO为null，则直接返回null
        if (generatorVO == null) {
            return null;
        }
        // 创建一个新的Generator对象
        Generator generator = new Generator();
        // 使用BeanUtils.copyProperties方法将generatorVO的属性值复制到generator对象中
        BeanUtils.copyProperties(generatorVO, generator);
        // 获取generatorVO中的标签列表
        List<String> tagList = generatorVO.getTags();
        // 将标签列表转换为JSON字符串，并设置到generator对象的tags属性中
        generator.setTags(JSONUtil.toJsonStr(tagList));
        // 获取generatorVO中的模型配置对象
        Meta.ModelConfig modelConfig = generatorVO.getModelConfig();
        // 将模型配置对象转换为JSON字符串，并设置到generator对象的modelConfig属性中
        generator.setModelConfig(JSONUtil.toJsonStr(modelConfig));
        // 获取generatorVO中的文件配置对象
        Meta.FileConfig fileConfig = generatorVO.getFileConfig();
        // 将文件配置对象转换为JSON字符串，并设置到generator对象的fileConfig属性中
        generator.setFileConfig(JSONUtil.toJsonStr(fileConfig));
        // 返回转换后的generator对象
        return generator;
    }


    /**
     * 对象转包装类
     *
     * @param generator 生成器对象
     * @return 转换后的生成器VO对象
     */
    public static GeneratorVO objToVo(Generator generator) {
        // 如果传入的generator为null，则直接返回null
        if (generator == null) {
            return null;
        }
        // 创建一个新的GeneratorVO对象
        GeneratorVO generatorVO = new GeneratorVO();
        // 使用BeanUtils.copyProperties方法将generator的属性值复制到generatorVO对象中
        BeanUtils.copyProperties(generator, generatorVO);
        // 将generator中的tags属性（JSON字符串）转换为List<String>，并设置到generatorVO的tags属性中
        generatorVO.setTags(JSONUtil.toList(generator.getTags(), String.class));
        // 将generator中的fileConfig属性（JSON字符串）转换为Meta.FileConfig对象，并设置到generatorVO的fileConfig属性中
        generatorVO.setFileConfig(JSONUtil.toBean(generator.getFileConfig(), Meta.FileConfig.class));
        // 将generator中的modelConfig属性（JSON字符串）转换为Meta.ModelConfig对象，并设置到generatorVO的modelConfig属性中
        generatorVO.setModelConfig(JSONUtil.toBean(generator.getModelConfig(), Meta.ModelConfig.class));
        // 返回转换后的generatorVO对象
        return generatorVO;
    }

}
